//
//  YHEmotionData.swift
//  XLWB
//
//  Created by key on 16/7/5.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

let kemotionRow = 3
let kemotionCol = 7
let kcellContent = kemotionRow * kemotionCol - 1

class YHEmotionData: NSObject {

    //-->创建单例对象
    static let shareEmotion:YHEmotionData = YHEmotionData()
    
    //-->获取bundle文件
    let emotionBundle:NSBundle = {
        
       let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        
        return NSBundle(path: path)! //此方法 根据指定路径获取bundle文件
       
    }()
    
    
    
    //MARK: - 数组封装
    
    
    //--> 根据bundle文件获取 指定plist文件中数组 一维数组
    func getEmotions(fileName: String) -> [YHEmotionModel] {
        
        //获取info.plist文件路径
        let file = emotionBundle.pathForResource("\(fileName)info.plist", ofType: nil)!
        
        //获取数组
        let array = NSArray(contentsOfFile: file)!
        
        //遍历数组 字典转模型
        var tempArr: [YHEmotionModel] = [YHEmotionModel]()
        for dict in array {
            
            let emotion = YHEmotionModel(dict: dict as! [String: AnyObject])
            
            //设置路径
            emotion.path = fileName
            
            tempArr.append(emotion)
            
        }
        
        //返回
        return tempArr
        
    }
    
    
    //--> 根据转模后的一维数组 进行切割 包装成一个二维数组
    func getEmotionGroup(fileName: String) -> [[YHEmotionModel]] {
        
        //获取一维数组
        let emotions = getEmotions(fileName)
        
        //->切割一维数组 进行包装
        //计算总共有多少页 总数量 / 每页(每个cell)容纳量
        //当总数量是108时 除以指定的20 结果的 5  这样就还有8个表情丢掉了
        //所以加上一个每页容量 再减 1 即总共有127 除 20  得 6 余 7  实际上是获取到了 表情的真是页数
        let page = (emotions.count + kcellContent - 1) / kcellContent
        
        
        //-> 循环页数 切割开始
        var tempArr: [[YHEmotionModel]] = [[YHEmotionModel]]()
        for i in 0..<page {
            
            
            //判断
            let length: Int
            if emotions.count < (i + 1) * kcellContent {
                //数组长度小于页数乘以每页容量时  表示此时已经是最后一页 需特殊处理
                length = emotions.count - i * kcellContent
                
            }else{
                
                length = kcellContent
            }
            //指定起始点 长度
            let range = NSRange.init(location:i * kcellContent , length: length)
            
            //数组切割
            let subArr = (emotions as NSArray).subarrayWithRange(range) as! [YHEmotionModel]
            
            tempArr.append(subArr)
        }
        
        return tempArr
    }
    
    
    
    //--> 根据切割方法 懒加载 默认表情 emoji表情 浪小花表情 二维数组
    //默认
    lazy var normalEmotion: [[YHEmotionModel]] = {[weak self] in
    
        let normal = self!.getEmotionGroup("default/")
        
        return normal
    
    }()
    
    //emoji
    lazy var emojiEmotion: [[YHEmotionModel]] = {[weak self] in
        
        let emoji = self!.getEmotionGroup("emoji/")
        
        return emoji
        
    }()
    
    //浪小花
    lazy var lxhEmotion: [[YHEmotionModel]] = {[weak self] in
        
        let lxh = self!.getEmotionGroup("lxh/")
        
        return lxh
        
    }()
    
    //--> 懒加载终极形态 三维数组 包含默认表情 emoji表情 浪小花表情数组
    lazy var emotionAllArray: [[[YHEmotionModel]]] = {[weak self] in
        
       return [self!.normalEmotion, self!.emojiEmotion, self!.lxhEmotion]
        
    }()
    
    
    //MARK: - 定义方法 供外界调用
    func getSearchEmoticon(chs: String) -> YHEmotionModel? {
        
        //遍历默认表情数组
        for normalE in normalEmotion {
            
            for e in normalE {
            
                if e.chs == chs {
                    
                    return e
                }
                
            }
        }
        
        //遍历浪小花表情数组
        for lxhE in lxhEmotion {
            
            for e in lxhE {
                
                if e.chs == chs {
                    
                    return e
                }
                
            }
        }
        
        
        //emoji表情 直接返回nil
        return nil
        
    }
}
